package iam

import (
	"time"
)

// Admin 管理员表模型 - 专门用于后台管理系统
type Admin struct {
	ID             uint64    `gorm:"primary_key;auto_increment" json:"id"`
	Username       string    `gorm:"type:varchar(50);uniqueIndex;not null;comment:管理员用户名" json:"username"`
	Password       string    `gorm:"type:varchar(255);not null;comment:密码hash" json:"-"`
	Nickname       string    `gorm:"type:varchar(100);comment:昵称" json:"nickname"`
	Email          string    `gorm:"type:varchar(100);comment:邮箱" json:"email"`
	Phone          string    `gorm:"type:varchar(20);comment:手机号" json:"phone"`
	Avatar         string    `gorm:"type:varchar(500);comment:头像URL" json:"avatar"`
	Status         int       `gorm:"type:tinyint;default:1;comment:状态 1:正常 2:禁用" json:"status"`
	IsSuperAdmin   bool      `gorm:"default:false;comment:是否为超级管理员" json:"is_super_admin"`
	LastLoginIP    string    `gorm:"type:varchar(45);comment:最后登录IP" json:"last_login_ip"`
	LastLoginTime  time.Time `gorm:"comment:最后登录时间" json:"last_login_time"`
	CreateBy       uint64    `gorm:"comment:创建人ID" json:"create_by"`
	UpdateBy       uint64    `gorm:"comment:更新人ID" json:"update_by"`
	CreateTime     time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
	UpdateTime     time.Time `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
}

// TableName 指定表名
func (Admin) TableName() string {
	return "admins"
}

// AdminRole 管理员角色关系表
type AdminRole struct {
	ID         uint64    `gorm:"primary_key;auto_increment" json:"id"`
	AdminID    uint64    `gorm:"not null;comment:管理员ID" json:"admin_id"`
	RoleID     uint64    `gorm:"not null;comment:角色ID" json:"role_id"`
	CreateBy   uint64    `gorm:"comment:创建人ID" json:"create_by"`
	CreateTime time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
}

// TableName 指定表名
func (AdminRole) TableName() string {
	return "admin_roles"
}

// AdminLoginLog 管理员登录日志
type AdminLoginLog struct {
	ID         uint64    `gorm:"primary_key;auto_increment" json:"id"`
	AdminID    uint64    `gorm:"not null;comment:管理员ID" json:"admin_id"`
	Username   string    `gorm:"type:varchar(50);comment:登录用户名" json:"username"`
	IP         string    `gorm:"type:varchar(45);comment:登录IP" json:"ip"`
	UserAgent  string    `gorm:"type:varchar(500);comment:用户代理" json:"user_agent"`
	Status     int       `gorm:"type:tinyint;comment:登录状态 1:成功 2:失败" json:"status"`
	Message    string    `gorm:"type:varchar(255);comment:登录消息" json:"message"`
	CreateTime time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
}

// TableName 指定表名
func (AdminLoginLog) TableName() string {
	return "admin_login_logs"
}

// 管理员状态常量
const (
	AdminStatusNormal   = 1 // 正常
	AdminStatusDisabled = 2 // 禁用
)

// 登录状态常量
const (
	LoginStatusSuccess = 1 // 成功
	LoginStatusFailed  = 2 // 失败
)